package com.itheima.mobile.controller;

import com.itheima.common.entity.Result;
import com.itheima.mobile.mapper.CheckGroupDao;
import com.itheima.mobile.mapper.CheckItemDao;
import com.itheima.mobile.pojo.Setmeal;
import com.itheima.mobile.service.IsetmealService;
import freemarker.template.Configuration;
import freemarker.template.Template;
import freemarker.template.TemplateException;
import lombok.extern.slf4j.Slf4j;
import org.apache.xmlbeans.impl.jam.provider.ResourcePath;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.web.bind.annotation.*;

import javax.annotation.PostConstruct;
import java.io.File;
import java.io.FileWriter;
import java.io.IOException;
import java.io.Writer;
import java.util.*;
import java.util.stream.Collectors;

@RestController
@Slf4j
@RequestMapping("/setmeal")
public class SetmealController {

    @Autowired
    private IsetmealService setmealService;

    @Autowired
    private CheckGroupDao checkGroupDao;

    @Autowired
    private CheckItemDao checkItemDao;

    /**
     * 初始化套餐页面，及套餐详情页模板
     */
    @PostConstruct
    public void init() throws Exception {
        generateSetmealHtml();
    }

    private void generateSetmealHtml() throws Exception {
        Configuration cfg = new Configuration(Configuration.getVersion());
        String path = ResourcePath.class.getResource("/templates").getPath();
        cfg.setDirectoryForTemplateLoading(new File(path));
        // 第三步：设置模板文件使用的字符集。一般就是utf-8.
        cfg.setDefaultEncoding("utf-8");
        // 第四步：加载一个模板，创建一个模板对象。
        Template template = cfg.getTemplate("mobile_setmeal.ftl");
        Map map = new HashMap();
        List<Setmeal> setmealList = (List<Setmeal>) setmealService.getSetmeal().getData();
        map.put("setmealList", setmealList);

        // 第六步：创建一个Writer对象，一般创建一FileWriter对象，指定生成的文件名。
        String outPath = ResourcePath.class.getResource("/mobile/pages/").getPath();
        Writer out = new FileWriter(new File(outPath+"setmeal.html"));
        template.process(map, out);
        // 第八步：关闭流。
        out.close();

        //生成套餐详情页
        generateSetmealDetailHtml(setmealList);
    }

    private void generateSetmealDetailHtml(List<Setmeal> setmealList) throws Exception{
        Configuration cfg = new Configuration(Configuration.getVersion());
        String path = ResourcePath.class.getResource("/templates").getPath();
        cfg.setDirectoryForTemplateLoading(new File(path));
        // 第三步：设置模板文件使用的字符集。一般就是utf-8.
        cfg.setDefaultEncoding("utf-8");
        // 第四步：加载一个模板，创建一个模板对象。
        Template template = cfg.getTemplate("mobile_setmeal_detail.ftl");
        //数据填充
        List<Integer> ids = setmealList.stream().map(Setmeal::getId).collect(Collectors.toList());
        for (Integer id : ids) {
            Setmeal  setmeal = (Setmeal) setmealService.findById(id.toString()).getData();
            Map map = new HashMap();
            map.put("setmeal", setmeal);
            // 第六步：创建一个Writer对象，一般创建一FileWriter对象，指定生成的文件名。
            String outPath = ResourcePath.class.getResource("/mobile/pages/").getPath();
            Writer out = new FileWriter(new File(outPath+"setmeal_detail_"+id+".html"));
            template.process(map, out);
            // 第八步：关闭流。
            out.close();
        }
    }

    @PostMapping("/getSetmeal")
    public Result getSetmeal() {
        return setmealService.getSetmeal();
    }

    @PostMapping("/findById")
    public Result findById(@RequestParam("id") String id) {
        return setmealService.findById(id);
    }

}
